chore: port v5-next to next#24825
Open
AztecBot wants to merge 812 commits into
Open
Conversation
…24456 to v5-next) (#24457) Ports #24456 to `v5-next`. ## What was wrong The interactions tracegen phase runs every lookup/permutation job concurrently: `AvmTraceGenHelper::fill_trace_interactions` concatenates all builders' jobs and dispatches them with `parallel_for`. Lookups whose fine-grained destination selector is a *shared* column (`DST_SELECTOR != outer_dst_selector`) can resolve to the same `dst_row` from different jobs, so multiple threads write the same `(selector, row)` cell at once. The previous code did a guarded read-modify-write on that shared cell: ```cpp if (DST_SELECTOR != outer_dst_selector && trace.get(DST_SELECTOR, dst_row) != 1) { trace.set(DST_SELECTOR, dst_row, 1); } ``` Both the `get` and the non-atomic 32-byte `set` race against the other threads' writes to the same cell — a data race, i.e. undefined behavior. In practice it produced the right value (every writer stores `1`), but it is still UB. ## The fix Add an opt-in `use_atomic_limbs` flag to `TraceContainer::set`. When set, the field's four 64-bit limbs are written with **relaxed atomic stores** — four plain `movq` on x86-64, no lock and no libatomic call. (A whole-field `std::atomic_ref<FF>` is *not* an option on the hot path: at 32 bytes it exceeds the hardware lock-free width and falls back to a locked libatomic call.) The shared selector write now uses it and drops the guard read: ```cpp if (DST_SELECTOR != outer_dst_selector) { trace.set(DST_SELECTOR, dst_row, 1, /*use_atomic_limbs=*/true); } ``` The write is an unconditional, idempotent atomic store of `1`. Because every concurrent writer stores the *same* value, per-limb atomicity is sufficient — no torn value is possible — so this is data-race-free without the cost of whole-field atomicity. The default (non-atomic) `set` hot path is untouched and keeps its sparse-column "zero = absent" fast path. ## Performance (this PR vs baseline) Mega bulk AVM tx, full proving, `HARDWARE_CONCURRENCY=16`. Tracegen stage timings, median of runs (baseline n=3, this PR n=6): | Stage | baseline | this PR | |---|---|---| | tracegen traces | 1,536 ms | 1,537 ms | | tracegen interactions | 350 ms | 329 ms | | tracegen all | 1,917 ms | 1,936 ms | No measurable cost — the safety fix is free. The per-limb atomic only fires on the shared selector writes in the interactions stage; the traces stage is byte-for-byte the same hot path as baseline.
BEGIN_COMMIT_OVERRIDE feat: use fact origin block state in offchain reception (#24292) END_COMMIT_OVERRIDE
Follow up of #24416. With this, PXE no longer has access to the message signing key nor the fallback keys, as should be (since the semantics of those keys require user approval before usage). To keep things simple, I removed the option of passing a seed from which all keys are derived to PXE and made it so the wallet must pass the privacy keys plus the message signing and fallback public keys. The wallet _does_ derive these from a seed, but that's a decision the wallet makes, PXE doesn't force it.
We were accidentally rejecting these but there's not reason not to, and had inconsistent encode/decode behavior.
The docs don't currently do a good job of explaining to users just how scared they should be of trying to do an upgrade as of today.
## Motivation Cleanup finishing #24404's work. That PR adopted shared wait helpers across the e2e suite but deliberately deferred 17 `// REFACTOR:` wait-code markers as harder or ambiguous cases. This resolves all of them, leaving zero `// REFACTOR:` markers under `end-to-end/src`. ## Approach - Adopt a shared helper where one genuinely fits. - Extract single-use / hard-to-adapt polls into descriptively-named local functions in the same file, then delete the marker. - Delete stale markers whose referenced code no longer exists. All changes are behavior-preserving refactors: comparator direction, timeouts (with seconds-vs-ms conversions where a helper's unit differs), the `retryUntil` falsy-means-keep-polling contract, and side effects (loops that send txs / advance blocks / rotate the oracle keep doing so every tick) are all retained. ## API changes New/changed test-only helpers (in `@aztec/ethereum` test utils and the e2e fees harness): - `ChainMonitor.waitForCheckpoint(match, opts)` gains an opt-in flag. When set, it takes a fresh `run()` snapshot and short-circuits if the current checkpoint already satisfies `match` before attaching the event listener. This closes an event-vs-poll already-satisfied race: a checkpoint could advance during a preceding wait and be missed by the purely event-driven path. The existing caller is unchanged. - New `RollupCheatCodes.waitForCheckpointBelow(checkpoint, opts)` — a poll-only waiter (mirroring `waitForEpoch`/`waitForSlot`) that reads the L1 rollup contract until the pending checkpoint drops below a baseline (rollback detection). No node dependency. - `snapshot_sync` now adopts the existing `ChainMonitor.waitUntilCheckpoint` (which has the already-satisfied guard) instead of a hand-rolled poll. - New `FeesTest.waitForEpochProven()` encapsulates the recurring `advanceToNextEpoch()` + `catchUpProvenChain()` pair (adopted in `failures` and `private_payments`).
…4448) Round of low-risk e2e test-suite speedups that touch only test fixtures and test-support code (no production behavior change). ## Approach - Parallelize the four independent setup boot steps (telemetry client, shared blob storage, ACVM config, BB config) in `setupInner` — they write disjoint config keys, so `Promise.all` is safe. - Parallelize the per-node `submitTransactions` loops in the gossip / preferred-gossip / rediscovery P2P tests (`Promise.all` preserves index order; `gossip_network_no_cheat` deliberately left serial). - Replace the per-tx full Schnorr account deployment in `submitTxsTo` with register-only `TestContract.emit_nullifier` throwaway txs (`#[noinitcheck]`, so no on-chain deploy) — same tx count, much lighter per-tx proving and DA across the P2P and slashing throwaway-tx paths. - Add an opt-out flag to `ChainMonitor` fee-data polling (default preserves current behavior) so slot-heavy tests can skip 5 rollup reads per L1 block.
…encer nonce race (#24386) ## Root cause `e2e_token_bridge_tutorial_test` flakes with `WaitForTransactionReceiptTimeoutError: Timed out while waiting for transaction … to be confirmed` ([example](http://ci.aztec-labs.com/1643e817d7242e0e)). It is **not** caused by #24378 — that PR only touches `forge_broadcast.js` (the L1 *contract deploy*), which succeeds in the failing run; the timeout is ~3.5 min later on one of the test's own L1 txs. The test runs against `aztec start --local-network`, whose `AutomineSequencer` continuously publishes checkpoint txs to L1. In `local-network.ts` the sequencer-publisher and validator keys are derived from `DefaultMnemonic` (`'test test … junk'`) at **address index 0** — `0xf39Fd6…` (visible as the publisher in the log). The test's L1 client was created with the **same** mnemonic and the **same** default index 0: ```ts const l1Client = createExtendedL1Client(ETHEREUM_HOSTS.split(','), MNEMONIC); // → account index 0 ``` So the test and the node's sequencer send L1 txs from one account, sharing a single nonce sequence. Against an automining anvil they race: a test tx can land with a nonce the sequencer just consumed (dropped / "already known"), or with a future-nonce gap that automine won't mine until the gap fills. Either way the tx gets a hash but never confirms, and viem's per-tx confirmation timeout fires. This is intermittent because it only bites when a test tx and a sequencer publish overlap. ## Fix Derive the test's L1 client from a **different** address index so its nonce space is independent of the sequencer's: ```ts const l1Client = createExtendedL1Client(ETHEREUM_HOSTS.split(','), mnemonicToAccount(MNEMONIC, { addressIndex: 1 })); ``` Index 1 (`0x70997970…`) is funded by anvil's default mnemonic and is unused by the local-network node (publisher/validator = index 0; index 2 is the prover and 3+ are attesters by the existing `setup.ts` / `setup_p2p_test.ts` convention, none of which run in local-network). The test is fully self-contained on its own L1 account — it deploys and owns the `TestERC20`, `FeeAssetHandler` and `TokenPortal`, and bridges to/from `l1Client.account.address` — so nothing requires it to be account 0. All of the test's L1 txs (including the `L1TokenManager` / `L1TokenPortalManager`, built from `l1Client`) now go through index 1. ## Verification This is an `compose` e2e test that needs docker + a full network; the container here is a source-only checkout (no `node_modules`, no docker), so I could not run the test or `./bootstrap.sh ci` locally — flagging that explicitly per the repo's red/green policy. The fix is verified by analysis: the timed-out tx is one of the test's own L1 txs, the shared-account nonce race is the established cause of this exact viem symptom, and account index 0 vs 1 are the well-known distinct anvil accounts (idx 0 = `0xf39Fd6…`, the publisher in the log; idx 1 = `0x70997970…`). ## Relationship to #24385 #24385 broadened this test's `.test_patterns.yml` flake pattern to keep CI from going red on the residual flake. This PR removes the underlying cause. The flake entry can stay as a safety net, or be narrowed back to the jest-timeout-only form once this has soaked — happy to follow up either way. --- *Created by [claudebox](https://claudebox.work/v2/sessions/c01cbe3dd422bf00) · group: `slackbot`*
This makes PXE stop trying to track a contract's current class. Instead, we fetch it on the fly from the node (which we already had to do anyway to make sure PXE's tracking of it was not out of sync). As a result, `pxe.updateContract` gets deleted. I introduced a contract class service, which deals with the interaction with the node for determining the current class (plus a cache to avoid repeated roundtrips), and an anchored contract data class for a given execution. There are some rough edges here (mostly in pxe.ts, which contains too much inlined code, and in some cases which receive both the anchored data and the raw store because the anchored data doesn't expose enough), but it's good enough for now I think. I created multiple follow up issues to clean some of this up. With this weird current class management gone, `registerContract` also became less important, so I simplified it to only take an instance, with `registerContractClass` taking the artifact. Both must be called. I also introduced a simpler version of `ContractInstance` (`ContractInstacePreimage`) which does not contain the current class - something only the AVM and the node care about - this is what PXE uses throughout. Once we fork the monorepo I imagine `ContractInstance` would be deleted on our side. Most other changes result from these decisions - the effects were quite far reaching. --------- Co-authored-by: Nicolas Chamo <nicolas@chamo.com.ar>
## What Lands the **inclusion sweep** on the v5 line — a nightly benchmark that deploys a live network and drives sustained **1 / 5 / 10 TPS** mixed-priority load, measuring transaction inclusion under load. Supersedes the stacked PRs **#24260** and **#24265**. ## Changes **Benchmark harness & output** - Run JSON **schema v5** + scraper: proving-infra (hint-gen + proving-queue), per-role `saturation` (ELU / CPU / mem / event-loop delay), per-pod node resource sizing, RPC ingress duration, per-tx block-build decomposition, a pool-side pending→mined delay, and validator attestation-failure metrics (the signal upstream of quorum loss). `run.benchmarkType` lets the dashboard group a day's sweeps by kind. - **`inclusionTpsMean`** is a steady-state rate (warmup ramp + drain tail trimmed), so `headlineKpi ≈ 1.0` on healthy runs. - **`reorgCount`** counts genuine chain reorgs only — events where the whole validator set pruned; a single/subset divergence is reported separately as `nodeLocalPruneCount`. Adds `prune_count` `prune_type` attribution for cause breakdown. - `throughputTps` (gossip / rpc / mined funnel) and `p2pBandwidthBytesPerSec` series. **Node-side metrics (aztec image)** - Accurate pending→mined delay (`now − receivedAt` at the mined transition, no eviction conflation), widened mined-delay histogram buckets, and `prune_count` attributed by `prune_type` so pending-chain reorgs are countable from metrics instead of logs. **Deployment / CI** - `bench-inclusion-sweep.env` (12×4 validators, 10 RPC, 10 full nodes, 72s slots, fake proving) + guaranteed-QoS resource profiles so every node gets reserved cores on an adequately-sized instance. - `nightly-bench-inclusion-sweep.yml`: deploy once, run 1/5/10 sequentially (own namespace each, shared sweepId), scrape-on-failure, GCS upload. Retires the single-point `nightly-bench-10tps` and the obsolete `bench_10tps` scenario. ## Validation (smoke network, all fixes applied) | TPS | Mined / failed | Chain reorgs | Checkpoint publish | Client incl. P50 / P95 | |---|---|---|---|---| | 1 | 291 / 0 | 0 | 14/14 | 9.1s / 20.8s | | 5 | 1595 / 0 | 0 | 15/15 | 12.3s / 28.2s | | 10 | 3261 / 0 | 0 | 14/15 | 19.5s / 41.9s | Under-provisioned validators (bin-packed onto 2-core nodes) were the original reorg cause: attesters couldn't re-execute proposed blocks fast enough to hold quorum. The dedicated-core profiles fix it at the root — at 10 TPS, 13–15 reorgs → 0 and ~57% → ~93% checkpoint publish. The few single-node divergences seen under load self-healed with 0 tx loss and now count as `nodeLocalPruneCount`, not chain reorgs. ## Follow-ups (not in this PR) - **Dashboard** (`AztecProtocol/explorations`): renders the v5 schema (companion PR #22). - The **nightly image** must contain the node-side metric/telemetry fixes before the nightly build picks them up. - Prover-node hint-gen (single-threaded) and attester block re-execution are the next throughput ceilings above 10 TPS — observable now, not blockers here. --------- Co-authored-by: AztecBot <tech@aztec-labs.com>
…24480) It was set to Field but was u32. I also adjusted some slightly outdated comments.
…4482) ## Problem CI on `merge-train/fairies-v5` is red at the `yarn-project` build step ([ci.aztec-labs.com/1783026321562696](http://ci.aztec-labs.com/1783026321562696)). The `compile_all` → `yarn tsgo -b --emitDeclarationOnly` typecheck fails with: ``` wallet-sdk/src/base-wallet/base_wallet.ts(375,36): error TS2339: Property 'address' does not exist on type 'ContractInstancePreimage'. wallet-sdk/src/base-wallet/base_wallet.ts(377,113): error TS2339: Property 'address' does not exist on type 'ContractInstancePreimage'. ``` These two were the complete set of errors reported by the (non-fail-fast) tsgo pass. ## Root cause This is a train-integration break, not a defect in the commit the CI run is attributed to (#24480, which only touched a TXE registry type). On the `v5-next` base, `ContractInstancePreimage` was refactored to no longer store a derived `address` field (address is now computed from the preimage; the with-address variant is the separate `ContractInstancePreimageWithAddress`). The fairies train's rewrite of `BaseWallet.registerContract` still read `instance.address`, which no longer exists on that type. ## Fix `PXE.registerContract(instance)` already returns the derived `AztecAddress` (it computes `computeContractAddressFromInstance(instance)` internally). Capture and use that returned address for the account-mismatch assertion instead of the removed `instance.address` field. This is semantically identical — the returned value is exactly the address the field used to hold — and touches only the two failing references. ## Verification The workspace this fix was prepared in is a bare checkout with no build/test cache available (no redis/docker) and insufficient free disk for a from-scratch `bb` + `noir` + TS build, so a full local `./bootstrap.sh ci-fast` could not be run to completion. The change is verified by inspection against the type definitions and the `PXE.registerContract` return contract; CI on this PR will exercise the real build. --- *Created by [claudebox](https://claudebox.work/v2/sessions/8542372f24dbb848) · group: `slackbot`*
BEGIN_COMMIT_OVERRIDE feat!: remove fallback and signing keys from pxe (#24451) fix(aztec-nr): support empty notes and events (#24464) docs: improve upgrades warning (#24462) feat!: make contract classes dynamic (#24282) fix(txe): align aztec_avm_returndataSize registry type with Noir u32 (#24480) fix(wallet-sdk): use derived contract address in registerContract (#24482) docs: document how to make nested utility calls (#24478) feat(aztec-nr): add interactive handshake to the handshake registry (#24473) END_COMMIT_OVERRIDE
Fix A-1360. Stacked on top of #24459
BEGIN_COMMIT_OVERRIDE fix(pxe): return no shared secrets when scope keys are not held (#24487) END_COMMIT_OVERRIDE
Hand-port of the v6 merge-train wiring directly onto `v5-next`, so a `v6-next` forked off `v5-next` carries the automation immediately (rather than waiting for `next` → `v5-next` propagation). Companion to the `next`-based PR #24516. Same three-file change as #24516: - **`merge-train-create-pr.yml`** — generalize base-branch detection from the hard-coded `*-v5` check to any `-v<N>` suffix (`-v5` → `v5-next`, `-v6` → `v6-next`; v5 behavior unchanged). Add `merge-train/spartan-v6` to the `ci-full-no-test-cache` list. - **`merge-train-next-to-branches.yml`** — add `v6-next` to the push trigger and a branch that auto-pulls `v6-next` into `merge-train/spartan-v6`. - **`merge-train-stale-check.yml`** — add a `spartan-v6` stale-check job (`BASE_BRANCH: v6-next`, `#team-alpha`), matching this branch's guard-free job style. `private-port-next` stays scoped to `v5-next` bases (so `spartan-v6` PRs are not auto-forward-ported), and `notify-private-sync` / nightly release-tag / spartan-bench are untouched — `v6-next` is a public-first staging line, not a release line. ### Branch sequence after this lands 1. Merge this PR into `v5-next`. 2. Create `v6-next` off `v5-next` (now carrying the v6 wiring). 3. Create `merge-train/spartan-v6` off `v6-next` — `create-pr` sees the tip is already in `v6-next` and skips; the first real commit opens the train PR against `v6-next`. --- *Created by [claudebox](https://claudebox.work/v2/sessions/706da64a13de6c13) · group: `slackbot`*
Just a comment.
Replace the secp256r1-specific unique/positive table_index test with one that sweeps every basic table reachable through any MultiTable. The LogDeriv relation identifies a table solely by table_index, so this guards against any generator (not just secp256r1 fixed-base) storing a window or bit-slice position in place of the builder-assigned index.
AztecBot
requested review from
IlyasRidhuan,
LeilaWang,
MirandaWood,
charlielye,
just-mitch and
nventuro
as code owners
July 21, 2026 07:23
Generated by ci-refresh-chonk. Only the pinned Chonk input hash is committed here; the immediate follow-up CI run is skipped intentionally. --ci-skip
fix(bb): assign unique secp256r1 lookup table indices
Reduce the mainnet SLASH_INACTIVITY_TARGET_PERCENTAGE default from 0.8 (80%) to 0.7 (70%) in spartan/environments/network-defaults.yml. Only the networks.mainnet preset is changed; devnet/testnet and the top-level slasher anchor (all 0.9) are untouched.
BEGIN_COMMIT_OVERRIDE fix(docs-examples): pin typescript to 5.x in execute runner (#24736) chore(spartan): restore 7 day mainnet slash grace period (#24804) chore(spartan): restore 7 day mainnet slash grace period (backport #24804) (#24808) feat: allow custom proof submission target address (#24270) END_COMMIT_OVERRIDE
…5-next (#24842) Brings public `v5-next` up to `private/v5-next` (`eb52040bd1`), porting the barretenberg secp256r1 fixed-base lookup-table soundness fix. ## Net change (6 files, all under `barretenberg/cpp/`) - Assign a unique `table_index` to each secp256r1 fixed-base lookup table, and add finalize-time guards that reject duplicate or zero table indices, with a new circuit-checker test (`Secp256r1FixedBaseTablesGetUniquePositiveIndices`, `FinalizationRejectsDuplicateTableIndices`, `FinalizationRejectsZeroTableIndex`). - Refresh the pinned Chonk IVC inputs hash to match the circuit change. ## Notes for reviewers - The commit set also includes the routine `chore: sync public-v5-next with upstream v5-next` merge nodes that sit between the two tips; those carry no net file change. The only net delta is the fix + the chonk hash bump. - Must merge via a **merge commit** (branch ruleset allows `merge` only). The public→private sync will reconcile `v5-next` afterward, so private stays a fast-forward of public.
## Summary - Documents the trust model of partial note completion on `PartialUintNote` and `PartialNFTNote`: - The validity commitment only proves that the contract created the partial note designating `completer`. - The storage slot and value/token id are trusted arguments, not bound by the commitment. - The completer is not authenticated by the check itself, so contracts must pass `msg_sender()` as `completer`. - Adds a WARNING that completion is not single-use: the designated completer can complete the same partial note any number of times, so contracts must make every completion independently paid for or authorized in the completing function (as the token and NFT contracts already do). - Fixes doc overclaims that said the validity commitment verifies the storage slot / state variable.
…#24844) ## Summary - AuthRegistry, MultiCallEntrypoint and PublicChecks hold no private state, but used the default `sync_state`, which performs pointless discovery RPC calls and embeds the HandshakeRegistry address in their bytecode. - Adds a shared `do_sync_state_no_op` handler to aztec-nr and wires it into those three contracts, plus SchnorrInitializerlessAccount, which previously carried its own local copy of the same no-op. - The pinned standard-contract artifacts are untouched, so shipped artifacts and addresses only change at the next intentional re-pin.
A contract with no notes might otherwise panic if e.g. it processed an offchain message related to one. I also made PXE skip the standard contracts that have no notes and events, both to avoid such a situation and because there's no need to do it.
BEGIN_COMMIT_OVERRIDE docs(aztec-nr): document partial note completion trust model (#24816) refactor(aztec-nr): shared no-op sync handler for stateless contracts (#24844) fix: dont panic on note msgs on contracts with no notes (#24852) docs(noir-contracts): document standard-contract re-pin consequences (#24890) fix: change init and single claim nullif to incl owner address, add testing utilities (#24892) END_COMMIT_OVERRIDE
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
BEGIN_COMMIT_OVERRIDE
chore: update Noir to v1.0.0-beta.22 (v5-next) (#23870)
refactor(pxe)!: derive oracle interfaces from registry and introduce aztec_misc_ prefix (#23840)
fix(ci): fail loudly on yarn.lock drift after build (#23882)
chore: regenerate yarn.lock for noir beta.22 (#23877)
feat!: proofless tx lookup in getTxByHash and getTxsByHash (#23827)
chore: update Noir to v1.0.0-beta.22 (v5-next, redo of #23870) (#23886)
chore: re-sync public-eligible files unintentionally diverged on v5-next (#219)
chore: pin build (#23869)
feat: merge-train/spartan-v5 (#23885)
feat(ci): private release to internal Artifact Registry (docker + npm) with nightly tags (#206)
refactor(pxe): append only NoteStore and PrivateEventStore (#23785)
feat(aztec-nr): include delivery mode in handshake discovery (#23873)
refactor(txe): move orchestration logic out of rpc_translator (#23904)
refactor(aztec-nr)!: move messages::message_delivery to messages::delivery (#23875)
fix(ci): run contract-snapshots tests in CI (#23895)
fix: check epoch job overlap (#23481)
fix: init bb sync before node rpc (#23864)
refactor(sequencer): split timing into consensus and proposer timetables (#23809)
chore: Accumulated backports to v5-next (#23879)
refactor(pxe): hash oracle registry instead of Oracle class (#23907)
chore(sequencer): gate checkSync behind the cheap proposer check (#23810)
test(cli-wallet): wait for checkpointed in serial sandbox flow tests (#23916)
feat: merge-train/spartan-v5 (#23910)
fix(docs): update webapp-tutorial to current wallets/PXE API + fix vite polyfill resolution (#23908)
fix: guard formatViemError structuredClone against non-cloneable errors (A-818) (#23919)
fix: validate contract artifact schema in CLI deploy/call path (A-836) (#23921)
feat: TransientArray (#23576)
refactor(pxe): replace Oracle class with Proxy-based buildACIRCallback (#23915)
test: stabilize validator_nuke_and_suppression post-recovery assertion (#23852)
fix(e2e): poll for high-value inclusion in n_tps bench (#23858)
fix(e2e): always init bb sync in wallet worker (#23855)
feat: merge-train/spartan-v5 (#23927)
fix: interrupt checkpoint job on sequencer stop (#23930)
chore: add tmp folder in yarn-project (#23932)
test(ci): skip non-deterministic expand::test_avm_test_contract snapshot (#23935)
feat: merge-train/fairies-v5 (#23881)
chore: cherry-pick private-port-next label (#23939)
fix(p2p): cap inbound tx DA gas limit by max tx blob size (A-1162) (#23933)
fix: ingest L1 checkpoints up to the blob block capacity (A-1156) (#23934)
fix: sync proposed checkpoint on HA peers (A-1165) (#23940)
feat(pxe): add constrained-secret search discipline to syncTaggedPrivateLogs (#23942)
chore: Accumulated backports to v5-next (#23931)
chore: reward boost config per AZIP-5 (#23943)
feat: merge-train/spartan-v5 (#23936)
feat: merge-train/fairies-v5 (#23948)
fix(pxe): prevent contract sync deadlock on nested syncs (#23951)
feat(noir): optionally install nargo from the matching official release (#23949)
docs(stdlib): clarify checkpoint capacity ceiling is the provable max (#23952)
feat(ci3): diversify build-instance spot via EC2 create-fleet (v5-next) (#23966)
feat: merge-train/fairies-v5 (#23961)
test: always capture local network logs for compose tests (#23912)
fix: pin getAttesters reads to a single L1 block (A-819) (#23920)
refactor(prover-node): CheckpointStore + SessionManager redesign (#23552)
feat: merge-train/spartan-v5 (#23965)
feat: initializerless schnorr account contract (#23962)
fix(p2p): stop checkpoint-replay storm when pruning to an uncheckpointed block (#23967)
refactor(sequencer)!: always enforce timetable with concrete block duration (#23821)
fix(e2e): drop removed enforceTimeTable option from optimistic proving test (#23976)
feat: merge-train/fairies-v5 (#23974)
feat: persist peer bans for a configurable duration (A-1157) (#23922)
fix(ci3): scope build-instance name by repo to stop cross-repo reaping (v5-next) (#23988)
fix(ci3): scope build-instance name by repo to stop cross-repo reaping (#308)
chore: improve noir contract test tooling (#23946)
fix: interrupt publisher send-at-slot sleep on sequencer stop (#23990)
refactor!: rename node JSON-RPC to aztec_* prefixes (#23909)
feat(aztec-nr): extend OnchainDelivery builder for secret origin (#23865)
fix(p2p): drive tx protection release from synced blocks instead of wall clock (#23978)
feat(aztec-nr): wire handshake secret discovery into contract sync (#23938)
fix(ci): run noir-projects nargo fmt check in CI (#24003)
chore: Accumulated backports to v5-next (#23994)
feat: merge-train/fairies-v5 (#23992)
chore(ci): public nightlies skip scenario tests and the next tag (#23984)
chore: public nightlies skip scenario tests and the next tag (backport #23984) (#24009)
chore: Backport to v5 next staging (#24010)
fix(p2p)!: resolve checkpoint tips from stored ids (#23968)
fix: deflake HA full e2e suite by switching to in-proc interval-mining anvil (#23979)
test: fix point_compression is_greater flag for regenerated BLS12-381 generator (#328)
fix(gas)!: client fallback limits track network per-block budget (A-1154) (#23947)
feat: network-wide consensus config with validation and override protection (A-1168) (#23977)
test(e2e): pick bad slots upfront and warp to them in
proposer invalidates multiple checkpoints(#24017)feat: use initializerless accounts (#23973)
chore(ci): scenario tests pick docker registry by repo on v5-next (#24022)
docs(CLAUDE.md): discourage unprompted subagents and dynamic workflows (#24027)
fix: remove type assertion (#24023)
feat: richer EphemeralArray and TransientArray APIs (#23982)
fix(bot): check L1-to-L2 message readiness against PXE sync tip (#24004)
fix: Merge Conflicts (#24014)
feat: merge-train/spartan-v5 (#23975)
fix: merge train conflicts (#24047)
refactor(stdlib)!: thin chain-checkpointed event, collapse sync (#24007)
refactor!: remove proposedCheckpoint tip (#24008)
fix(sequencer): wait for previous L1 block before publishing (#24037)
fix: restore v5-next merge ancestry on fairies merge train (re-open #24047) (#24049)
fix: client flows benchmarks (#24055)
test(e2e_fees): bridge fee juice from a dedicated L1 account (#24054)
fix(aztec-node): pipelining-aware slot and fee simulation in simulatePublicCalls (#24031)
feat: merge-train/fairies-v5 (#24020)
fix(ci3): GITHUB_REPOSITORY unbound when running ci.sh locally (v5-next) (#24060)
refactor: move registerContractFunctionSignatures to the node debug API (#24066)
fix(noir-protocol-circuits): fail when pinned VKs do not match (#364)
chore: reject non-canonical x coordinate (native affine_element) (#24029)
fix: resolve v5-next → merge-train/spartan-v5 conflict (#24072)
chore: merge v5-next into merge-train/spartan-v5 (raw, conflict markers) (#24071)
chore: remove obsolete no_predicates wrappers (#7729) (#24050)
feat: add alerts for internal networks (#24090)
test(ci): mark e2e_epochs/epochs_mbps_redistribution as flaky (#24098)
fix: isolate cross-chain L1 writes from publisher nonce (#24104)
fix(ci3): cache DNS on build instances on v5-next (#24107)
test(world-state): make delayed-close fork queue-cleanup wait deterministic (#24106)
chore: Accumulated backports to v5-next (#24095)
chore: remove obsolete no_predicates wrappers (#7729) (#24093)
fix(kv-store): lazy-load skipped browser benchmark deps (#24108)
fix(ci): name the merge-train branch in Slack notifications (#24102)
feat!: change for_each iteration order in CapsuleArray, EphemeralArray, TransientArray (#24021)
chore: Accumulated backports to v5-next (#24118)
feat(p2p): slash proposers exceeding max blocks per checkpoint (A-1166) (#24041)
fix(stdlib): fix race conditions in L2BlockStream (#24042)
chore: resolve public-v5-next→v5-next merge (regen pinned VKs) (#391)
chore: merge public-v5-next into v5-next (#388)
test(prover-node): make checkpoint store pruning test deterministic (#24130)
feat: merge-train/fairies-v5 (#24117)
fix(simulator): make circuit recorder concurrency-safe via AsyncLocalStorage (#24112)
refactor(pxe): restore satisfies-typed oracle registries (#24132)
feat: merge-train/spartan-v5 (#24053)
feat: merge-train/fairies-v5 (#24134)
fix: rename contract class getters to reflect origina vs current (#24140)
fix: content-addressed merkle tree / LMDB store correctness fixes (#211)
feat: merge-train/fairies-v5 (#24144)
fix(test): reliably find target proposer in sentinel_status_slash (A-1217) (#24143)
fix(test): wait for full gossip mesh before committee produces (A-1219) (#24149)
fix: init bb.js sync singleton before subsystems start in createAndSync (#24147)
feat(prover-node): capture checkpoint-level proving metrics (#24051)
fix: allow prover mode autodetection (#24151)
chore: add create-issue skill for filing Linear issues (#24082)
fix: stabilize scenario invalidation timing (#24128)
fix: set default inbox lag to 2 (#24127)
test(spartan): wait for proposed instead of checkpointed in performTransfers (#24123)
fix(validator): make block-number guard reorg-aware (A-1218) (#24141)
chore: Accumulated backports to v5-next (#24153)
refactor: Booth-slice element MSM (straus_msm + batch_mul), shared with Constantine recoder (#23691)
fix(pxe): repoint broken debugging docs link in PXE error messages (#24145)
fix(test): pin AZTEC_INBOX_LAG=1 in sandbox compose envs (#24162)
chore(sequencer): downgrade insufficient-txs block log to verbose (#24164)
feat: merge-train/fairies-v5 (#24152)
fix(ci): import initializerless account in CLI acceptance test (#24175)
fix(test): use in-memory file store for TxFileStore tests (A-1211) (#24167)
fix(test): handle default inbox lag of 2, remove temporary inboxLag=1 pins (A-1250) (#24170)
fix(world-state): clean up queues for destroyed forks (#24178)
feat(bb)!: Hard-code shift size in merge verifier (#409)
feat: merge-train/fairies-v5 (#24176)
feat: merge-train/spartan-v5 (#24148)
fix(ethereum): skip unfunded publishers in selection (#24180)
test(e2e): deflake epochs_mbps_redistribution (#24182)
test(l1): assert verifier/distributor/booster/slasher references in V5 validate() (#24187)
feat(l1): add V5 upgrade payload and deploy script (#23752)
feat(prover-node)!: wire prover JSON-RPC API to the admin endpoint (#24189)
feat: merge-train/spartan-v5 (#24181)
fix(p2p): re-seed discovery from persisted peer ENRs after restart (#24169)
docs(e2e): annotate e2e tests with setup/category notes (#24191)
feat(txe): auto-generate oracle serialization roundtrip tests (#24138)
feat: reject out-of-range checkpoint header fields at propose (A-1254) (#24199)
feat: merge-train/fairies-v5 (#24200)
feat: protect epoch-proof fees against an unsound verifier (#24190)
feat(aztec-nr)!: add msg_sender to the utility context (#24062)
fix(cli): transpile pre-existing artifacts on aztec compile (#24188)
feat: merge-train/fairies-v5 (#24206)
chore: merge v5-next into merge-train/spartan-v5 (raw, conflict markers) (#24221)
feat: make node.getContract take an optional reference block (#24207)
fix(archiver): index zero-field logs under empty tag instead of throwing (A-1253) (#24212)
feat(aztec-nr): wire constrained message delivery (#23866)
fix(prover-node): report awaiting-root and publishing-proof phases in EpochSession (A-1212) (#24216)
fix(p2p): bound declared contract-class bytecode length before allocating (A-1258) (#24213)
fix(p2p): frame gossipsub msgId and restrict allowedTopics (A-1256) (#24214)
chore: merge v5-next into merge-train/spartan-v5 (#24226)
fix(pxe): respect slot boundaries in oracle (de)serialization (#24211)
fix(p2p): guard ENR address parsing against malformed TCP fields (A-1255) (#24215)
feat: allow registration of raw shared secrets (#23708)
feat(e2e): constrained delivery and discovery with two PXEs (#24228)
feat: merge-train/spartan-v5 (#24196)
refactor(stdlib)!: rename unsafe AztecAddress constructors to *Unsafe (#24230)
fix(world-state): verify archive root in sync_block to reject divergent state (#24229)
feat(aztec-node): force sentinel for validators + offense collection (#24202)
fix(archiver): treat re-publish of preloaded protocol contracts as idempotent (#24227)
test(e2e): wait for L1 txs to be mined in token bridge tutorial test (#24065)
docs(v5-next): backport doc corrections from #24005 and #23830 (#24242)
docs(v5-next): backport counter tutorial alignment from #23517 (#24243)
fix(txe): correct AVM oracle registry types for call and success_copy (#24203)
fix(spartan): fund sponsored FPC in block-capacity bench env (#24248)
feat(aztec-nr): make handshake tagging secrets mode agnostic (#24241)
feat: merge-train/spartan-v5 (#24256)
docs: add network-deployed-version skill (#24238)
docs: require self-contained code comments (#24239)
fix(archiver): validate checkpoint attestations from calldata before fetching blobs (A-1252) (#24247)
fix(sequencer): prune in failed-sync fallback so the chain can recover (#24253)
fix: port reusable network-teardown action to v5-next (#24252)
fix(telemetry): raise span queue size and make telemetry shutdown idempotent (#24121)
feat: merge-train/spartan-v5 (#24264)
test(validator-client): deflake integration test with frozen clock (#24259)
chore: Accumulated backports to v5-next (#24267)
fix(ci3): cache DNS on build instances to dodge link-local PPS throttling (#24105)
chore: Accumulated backports to v5-next (#24277)
refactor(pxe): derive oracle wire mappings from plain structs (#24244)
test: retry composed cheat code timestamp race (#24279)
chore: merge v5-next into merge-train/fairies-v5 (#24296)
chore: merge v5-next into merge-train/fairies-v5 (#24299)
refactor(aztec_sublib): drop unused standard addresses and authwit (#24273)
chore(sqlite3mc-wasm): bump SQLite3MultipleCiphers to 2.3.5 (#24293)
refactor(aztec-nr)!: return structs from call & keys oracles (#24284)
refactor(aztec-node): split server.ts into factory + focused modules (#24283)
docs(v5-next): backport v5 testnet connection details + evergreen doc fixes (#24246)
refactor(testing): route warpL2Time cheat codes through automine debug RPC (#24303)
feat(node): auto-shutdown node on incompatible canonical rollup upgrade (#24269)
feat(pxe)!: unify sender/secret registration into TaggingSecretSource (#24280)
feat(pxe): resolve tagging secret strategy via wallet hook (#24040)
test: deflake e2e_offchain_payment reorg reprocessing race (#24309)
feat: FactStore (#23989)
feat(e2e): track per-test setup/hook timings (#24281)
chore(tooling): add monitor-pr skill (#24274)
test: deflake epochs_optimistic_proving reorg-during-proving gate (#24308)
fix(kernel): bind tx_request_salt across the private kernels (#477)
fix(pxe): use v5 AztecAddress factories in FactStore (#24322)
refactor: message context service -> tx resolver service (#24131)
feat: merge-train/spartan-v5 (#24272)
fix(aztec-node): import inspectBlockParameter in server.ts (#24323)
refactor(e2e): consolidate the multi-node and single-node test categories (#24201)
fix(e2e): keep timing_env testEnvironment through yarn prepare (#24328)
feat: add TestEnvironment::send_l1_to_l2_message (#24314)
feat: aztec.nr side of fact store (#24139)
refactor(noir-contracts): drop unneeded constrained delivery (#24336)
refactor: offchain reception on entity store (#24142)
test(e2e): speed up setup by automining L1 contract deployment (#24313)
test(e2e): increase slashing proposer search attempts (#24339)
test(sequencer-client): fix checkpoint proposal job timetable setup (#24346)
test(e2e): consolidate more tests into multi-node and single-node categories (#24310)
test(e2e): 10x faster deploy L1 contracts via on-demand mining under anvil automine (#24316)
fix: exclude tmp from yarn-project clean-lite (#24342)
fix(sequencer): gate waitForMinTxs on age-eligible pending tx count (#24315)
fix: support pagination in getPublicEvents (#24324)
test(noir-contracts): TestToken with unconstrained delivery and repoint e2e tests (#24337)
feat: merge-train/fairies-v5 (#24223)
fix(ci): retry forge solc fetch on transient DNS failures (#24358)
chore: copy constants and verifier out of private for v5 payload (#24297)
fix(aztec-nr): Prevent handshake nullifier griefing and nullifier sequence tests (#24258)
chore: merge v5-next into merge-train/spartan-v5 (#24361)
chore: Accumulated backports to v5-next (#24360)
test(e2e): bound fee settings L1 base fee spike (#24355)
feat(aztec-nr): derive message tag from a resolved secret source (#24312)
test(sequencer-client): freeze clock with ManualDateProvider to deflake checkpoint build-offset assertion (#24363)
test(e2e): deflake optimistic-proving by anchoring epoch and asserting on checkpoint header slot (#24364)
test(e2e): drop advancePastGenesis now that genesis uses a real timestamp (#24362)
feat(keys)!: add derivation for message-signing and fallback keys (#24348)
test(e2e): start debug_trace single-node test at genesis block 0 (#24376)
test(e2e): anchor multi_proof on a fresh epoch instead of hardcoding epoch 0 (#24372)
feat: make sqlite the path of least resistance backend option for PXE and wallet (#24179)
test(e2e): consolidate the automine test category (#24343)
test(e2e): deflake sync_after_reorg by waiting on the rollup's actual prune predicate (#24379)
feat: merge-train/spartan-v5 (#24331)
fix(ethereum): broadcast L1 deploy txs one at a time on anvil to dodge automine race (#24378)
test(ci): classify e2e_token_bridge_tutorial L1-tx confirmation timeout as the known flake (#24385)
feat: merge-train/fairies-v5 (#24365)
feat: merge-train/spartan-v5 (#24384)
chore(aztec-nr): add constrained delivery index nullifier test (#24366)
refactor(e2e): relocate no-node straggler tests (#24344)
test(e2e): pin gas_estimation public-payment txs to one block to deflake fee comparison (#24382)
feat(archiver): event-trigger L2BlockStream sync from archiver updates (#24317)
fix(release-image): stamp stdlib/package.json with release version (#23393)
fix(key-store): protect all KeyStore methods with transactionAsync (#24406)
fix(release-image): stamp stdlib/package.json with release version (#24405)
feat(pxe): add resolveCustomRequest hook for caller-defined requests (#24409)
test(e2e): speed up individual e2e tests (#24345)
chore(e2e): warm blob KZGs in parallel during setup (#24383)
chore: add perf as a valid PR title prefix (#24412)
refactor(pxe): unify the app-silo primitive for tagging and encryption (#24402)
feat!: close down access to context member fields (#24417)
feat(pxe): default unconstrained delivery to a handshake (#24387)
test(e2e): adopt shared wait helpers (#24404)
test(e2e): run prover client.test.ts in CI (#24399)
fix(ethereum): mine empty L1 blocks without touching the mempool (#24414)
test(e2e): deflake empty block proving test (#24411)
test(e2e): allocate HA node p2p ports above the ephemeral range to deflake e2e_ha_full (#24418)
fix(sequencer): use evmMine in automine auto-settle to avoid dropping test L1 txs (#24421)
test(e2e): instrument common spans for wall-clock tracking (#24407)
test(e2e): remove redundant reqresp_no_handshake e2e test (#24424)
feat!: allow passing and retrieving privacy keys in pxe/wallet (#24416)
feat: merge-train/spartan-v5 (#24391)
fix(bench): use address-derived tagging secrets for the client-flows bench; widen the PXE unfinalized tagging window (#24429)
test(e2e): skip token bridge deploy and pre-deploy cross-chain L1 contracts (#24408)
feat(aztec-nr): let contracts choose the message tag derivation (#24432)
feat: merge-train/fairies-v5 (#24388)
feat(pxe): origin block number timestamp log oracle in log retrieval (#24398)
feat: merge-train/spartan-v5 (#24438)
fix(sequencer): recover fee-estimation caches from transient L1 read failures (#24426)
test(e2e): fix epoch-2 tip race in proof_fails after-epoch-end test (#24441)
feat: annotate fact origin block state (#24289)
feat: merge-train/fairies-v5 (#24443)
feat(avm): lock-free sharded TraceContainer (port #24300 to v5-next) (#24442)
feat: use fact origin block state in offchain reception (#24292)
fix(avm): avoid data race on shared interaction selector writes (port #24456 to v5-next) (#24457)
feat: merge-train/fairies-v5 (#24455)
feat!: remove fallback and signing keys from pxe (#24451)
fix(aztec-nr): support empty notes and events (#24464)
docs: improve upgrades warning (#24462)
test(e2e): resolve remaining wait-code REFACTOR markers (#24428)
perf(e2e): parallelize setup & p2p work and lighten throwaway txs (#24448)
fix(e2e): give token_bridge_tutorial its own L1 account to avoid sequencer nonce race (#24386)
feat!: make contract classes dynamic (#24282)
feat(bench): Updated tx inclusion benchmarking (#24266)
fix(txe): align aztec_avm_returndataSize registry type with Noir u32 (#24480)
fix(wallet-sdk): use derived contract address in registerContract (#24482)
docs: document how to make nested utility calls (#24478)
feat(aztec-nr): add interactive handshake to the handshake registry (#24473)
feat: merge-train/fairies-v5 (#24470)
fix: improve valkeys password handling (#24459)
feat: allow separate valkeys passwords. (#24460)
fix(pxe): return no shared secrets when scope keys are not held (#24487)
feat: speed up valkeys generation (#24467)
feat: merge-train/fairies-v5 (#24505)
feat(ci): merge-train/spartan-v6 (v5-next port) (#24517)
chore: Accumulated backports to v5-next (#24497)
feat: store discovered handshakes as facts (#24483)
feat: merge-train/fairies-v5 (#24519)
feat: merge-train/spartan-v5 (#24454)
fix(sequencer): do not run fallback actions within build window (#24504)
fix(proposal-handler): ensure we default to pushing blocks to archiver (#24506)
fix(p2p): bump global reqresp limits (#24507)
fix(p2p): reject proposal when expected proposer is undefined (#24509)
fix(archiver): tolerate re-included already-stored checkpoints (#24513)
fix(p2p): canonicalize yParity attestation signatures before L1 bundle (#24515)
test(e2e): sync anvil clock before sequencer start (#24474)
test(e2e): consolidate automine token suites (#24489)
test(e2e): consolidate automine contracts and effects suites (#24490)
test(e2e): consolidate cross-chain bridge and messaging suites (#24491)
test(e2e): merge single-node fee, proving, and sequencer config suites (#24492)
test(e2e): name shared timing presets and collapse proof-submission constants (#24494)
test(e2e): unify slashing timing profiles and merge duplicate suites (#24495)
test(e2e): dedupe multi-node block-production and governance test setups (#24498)
test(e2e): extract p2p gossip scenario skeleton and add category README (#24500)
test(e2e): split node-killing HA test into its own composed suite file (#24503)
feat(sequencer): make sequencer pausable (#24475)
feat: merge-train/spartan-v5 (#24524)
fix(sqlite3mc-wasm): restore bundler-visible wasm resolution (#24529)
perf(e2e): warp proven-checkpoint waits, tighten in-process polling, and instrument setup spans (#24452)
fix: reject aztecSlotDuration not a multiple of ethereumSlotDuration (#24481)
ci: apply private-port-next label to any v-next merge-train base (v5-next) (#24538)
refactor(aztec-nr): rename get_handshakes to non_interactive variant (#24511)
fix(pxe): UNFINALIZED_TAGGING_INDEXES_WINDOW_LEN should be MAX_PRIVATE_LOGS_PER_TX + headroom, not exactly MAX_PRIVATE_LOGS_PER_TX (#24437)
refactor(aztec-nr): keep handshake secrets internal to TagSecretSource (#24508)
fix(config): fail loudly on invalid or fractional numeric config (#24536)
fix(sequencer): invalidate malicious yParity attestation checkpoints (A-1401) (#24537)
test(txe): extend oracle roundtrip coverage to more scalar oracles (#24550)
refactor!: reimplement partial notes on FactStore (#24369)
fix(ethereum): deflake monitor timeout tests in l1_tx_utils (#24545)
fix(ci): retry docker compose up on transient registry pull failures (#24546)
fix(e2e): resolve flaky proposer-not-found in equivocation_offenses duplicate_proposal test (#24557)
fix(e2e): resolve flaky checkpoint TypeError in multi_validator_node test (#24543)
feat!: stop deriving signing key from privacy keys (#24439)
fix(ethereum): prevent unhandled L1 rejections from tx monitor loops during shutdown (v5 line, partial) (#24551)
fix(sequencer): prevent unhandled rejections from in-flight L1 requests during shutdown (v5 line) (#24560)
feat: merge-train/fairies-v5 (#24530)
feat: merge-train/spartan-v5 (#24532)
fix(node): fork-aware getWorldState that fails closed on sync errors (#24563)
fix(validator): prevent double-sign on stuck-duty cleanup race and handle pg pool errors (A-1313, A-1314) (#24556)
fix(p2p): bound reqresp response buffering before size check (#24553)
fix: preload txe with protocol contracts (#24574)
fix(p2p): reject reqresp requests larger than a single muxer frame (#24554)
fix(p2p): process one request per reqresp stream to enforce rate limit (#24552)
fix(validator): fail closed on signing-protection persistence gaps (A-1315, A-1317, A-1318) (#24565)
feat(p2p): retain finalized txs a configurable margin behind finality (#24329)
test(e2e): onchain message delivery harness (#24373)
feat(pxe): recipient-side interactive handshake registration (#24514)
feat(aztec-nr): sender-side support for interactive handshakes (#24522)
feat: merge-train/spartan-v5 (#24576)
test(txe): struct support in oracle serialization roundtrip tests (#24588)
chore(prover-client): demote empty addTxs log from warn to verbose (#24593)
refactor(aztec-nr): drop unused HandshakeNote fields (#24595)
docs: threat model for node (#24465)
feat: merge-train/spartan-v5 (#24596)
feat: merge-train/fairies-v5 (#24580)
docs(e2e): update READMEs for the consolidated suite layout (#24518)
test(e2e): instrument and diagnose bot suite setup cost (#24534)
perf(e2e): warp dead waits in multi-node recovery and proving tests (#24566)
perf(e2e): shrink e2e slot times (#24570)
perf(e2e): seed BananaFPC fee juice at genesis instead of bridging (#24564)
perf(bot): parallelize independent bot factory setup steps (#24581)
feat(world-state): support prefilled nullifiers in genesis state (#24567)
perf(e2e): seed standard contracts at genesis (#24568)
fix: tweak depositToAztec gas config (#24607)
feat(prover): revive cancelled proving jobs from a persisted aborted state (#24578)
chore: add writing-e2e-tests skill (#24597)
perf(e2e): overlap and batch setup txs in e2e harnesses (#24569)
feat!: make inbox secrets be multiple fields (#24599)
feat(e2e): interactive handshake e2e (#24590)
docs: revert threat model for node (#24465) (#24610)
docs: document initializerless accounts (v5-next backport of #24512) (#24598)
docs: add video lessons page with short explainer videos (v5-next backport of #24555) (#24601)
feat: merge-train/fairies-v5 (#24609)
fix(txe): align tagging strategy oracle with PXE (#24561)
feat: merge-train/fairies-v5 (#24619)
fix(sol): use pinned compiler for bb sol build (#24620)
fix(aztec.js): give waitForNode a bounded default timeout (#24627)
refactor: cache Aztec node reads per execution (#24630)
feat(pxe)!: Add AppTaggingSecret kinds to keys in tagging stores (#24604)
feat: add batch is block in archive oracle (#24634)
feat: merge-train/spartan-v5 (#24606)
feat: merge-train/fairies-v5 (#24632)
feat: getTxEffects oracle (#24636)
fix(prover-node): rebuild pruned checkpoint provers and recover the epoch (#24436)
docs: add offchain message delivery guide (backport of #24583 to v5-next) (#24613)
feat: preserve stores on schema version or rollup address change (#24631)
feat: assert non revertible phase when setting fee payer (#24479)
feat: merge-train/spartan-v5 (#24641)
fix: release OPFS handles before sqlite worker close/delete ack (#24647)
feat: merge-train/fairies-v5 (#24638)
fix(prover-node): do not abort in-flight proving jobs on a clean shutdown (#24579)
fix: prevent access to secrets not in scope (#24616)
fix: prevent reception of messages too far into the future (#24645)
fix(aztec-nr): prevent recipient forging a colliding handshake (#24403)
feat: merge-train/spartan-v5 (#24652)
feat!: forbid external note validation checks (#24644)
feat(txe): add option to authorize all utility call targets (#24662)
docs: fee readme improvements (#24666)
feat(cli): support funding accounts in validator-keys new/set-funding-account (#24476)
feat(cli): support funding accounts in validator-keys new/set-funding-account (#24476)
feat: merge-train/fairies-v5 (#24654)
fix(aztec-nr): reject infinity ephemeral key in message encryption (#24665)
feat: merge-train/spartan-v5 (#24669)
chore: Accumulated backports to v5-next (#24670)
feat: merge-train/fairies-v5 (#24673)
test: fix proof_boundary startup race (#24671)
feat: merge-train/spartan-v5 (#24677)
feat: exported in-process testing network (#24629)
chore: move prover namespace to regular RPC server (#24680)
chore: revert "chore: move prover namespace to regular RPC server" (#24683)
fix(pxe): widen tracked sender tagging ranges with onchain discovery evidence (#24655)
feat: merge-train/fairies-v5 (#24682)
fix(aztec-nr): tolerate malformed partial-note completion logs (#24668)
feat: merge-train/fairies-v5 (#24702)
chore: merge v5 into v5-next (#24700)
fix: handle corruption errors (#24739)
feat: merge-train/fairies-v5 (#24744)
fix(validator): sync world state before forking in checkpoint proposal validation (#24694)
fix(docs-examples): pin typescript to 5.x in execute runner (#24736)
feat: merge-train/spartan-v5 (#24746)
feat: weblock controlled opfs pool (#24740)
chore: handle legacy duplicate opaque handles (#24743)
fix(aztec-nr)!: compute note property selectors from the packed layout (#24689)
feat: merge-train/fairies-v5 (#24769)
chore(spartan): restore 7 day mainnet slash grace period (#24804)
chore(spartan): restore 7 day mainnet slash grace period (backport #24804) (#24808)
feat: allow custom proof submission target address (#24270)
refactor(pxe): compute oracle interface hash from wire-structural mapping labels (#24752)
fix: tagging secrets not being scoped by sender (#24772)
chore: clarify scope of packable impl detection (#24820)
feat: merge-train/fairies-v5 (#24817)
chore: don't auto prune mainnet/testnet snapshots (#24813)
chore: barebones constants-codegen project (#24687)
chore(spartan): lower mainnet inactivity slash target to 70% (#24827)
chore: fix L1 rpc dashboard (#24818)
chore: prover node rpc (#24681)
chore: constants codegen release (#24728)
chore: Accumulated backports to v5-next (#24750)
chore: add rate-limited testnet rpc client (#24836)
fix(ci): move nightly bench inclusion sweep to 06:00 UTC (#24830)
fix(bench): handle void worker-wallet returns in inclusion sweep (#24843)
fix(bb): port secp256r1 unique-lookup-index soundness fix to public v5-next (#24842)
feat: merge-train/fairies (#24833)
docs(aztec-nr): document partial note completion trust model (#24816)
refactor(aztec-nr): shared no-op sync handler for stateless contracts (#24844)
feat: merge-train/spartan (#24834)
fix: dont panic on note msgs on contracts with no notes (#24852)
docs(noir-contracts): document standard-contract re-pin consequences (#24890)
fix: change init and single claim nullif to incl owner address, add testing utilities (#24892)
chore: re-pin handshake registry with owner-bound nullifiers (#24893)
feat: merge-train/fairies-v5 (#24891)
END_COMMIT_OVERRIDE